-
-
Notifications
You must be signed in to change notification settings - Fork 167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ENH: Display more information in MonteCarlo prints and plots #760
base: develop
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall it is looking good
CHANGELOG.md
Outdated
@@ -48,6 +48,7 @@ Attention: The newest changes should be on top --> | |||
|
|||
- REL: update version to 1.7.1 in configuration files [#750](https://github.com/RocketPy-Team/RocketPy/pull/750) | |||
- MNT: Refactor Tank's testing Assertion with CAD data. [#678](https://github.com/RocketPy-Team/RocketPy/pull/678) | |||
ENH: Display more information in MonteCarlo prints and plots [#760](https://github.com/RocketPy-Team/RocketPy/pull/760) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very minor, but new lines should be add to the top, not the bottom of sections. This is common confusion.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah I see, it's also in the wrong section. fixed now
rocketpy/plots/monte_carlo_plots.py
Outdated
for key in keys: | ||
plt.figure() | ||
plt.hist(self.monte_carlo.results[key]) | ||
plt.title(f"Histogram of {key}") | ||
plt.ylabel("Number of Occurrences") | ||
fig, (ax1, ax2) = plt.subplots(2, 1, height_ratios=[1, 3], figsize=(8, 8)) | ||
|
||
# Plot boxplot | ||
ax1.boxplot(self.monte_carlo.results[key], vert=False) | ||
ax1.set_xlabel(key) | ||
ax1.set_title(f"Box Plot of {key}") | ||
|
||
# Plot histogram | ||
ax2.hist(self.monte_carlo.results[key]) | ||
ax2.set_title(f"Histogram of {key}") | ||
ax2.set_ylabel("Number of Occurrences") | ||
|
||
plt.tight_layout() | ||
plt.show() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Lucas-Prates should we really plot the 3 plot altogether? Perhaps letting the user activate/deactivate some of them if needed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could provide the option to activate/deactivate, but I see no harm in plotting these together. I mean, we get more information and the plot is not convoluted, looks fine to me. Moreover, I only see two plots (histogram + boxplot).
rocketpy/simulation/monte_carlo.py
Outdated
mean = np.mean(values) | ||
stdev = np.std(values) | ||
self.processed_results[result] = (mean, stdev) | ||
pi_low = np.quantile(values, 0.025) | ||
pi_high = np.quantile(values, 0.975) | ||
median = np.median(values) | ||
self.processed_results[result] = (mean, median, stdev, pi_low, pi_high) | ||
except TypeError: | ||
self.processed_results[result] = (None, None) | ||
self.processed_results[result] = (None, None, None, None, None) | ||
|
||
# Import methods |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
try:
mean = np.mean(values)
stdev = np.std(values)
self.processed_results[result] = (mean, stdev)
pi_low = np.quantile(values, 0.025)
pi_high = np.quantile(values, 0.975)
median = np.median(values)
except TypeError:
mean = None
stdev = None
pi_low = None
pi_high = None
median = None
self.processed_results[result] = (mean, median, stdev, pi_low, pi_high)
Alternatively, we could make 5 try/except blocks instead of one single.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh yeah sorry i missed that, I have committed this suggestion
I don't think 5 try/except blocks is necessary. A situation where only one of these calculations fails seems unlikely to me. ie: either they all fail or none fail so catching them all in the same makes sense.
Apologies for duplicate. I saw that before opening the PR but it seemed like it was unfinished and contained errors I believe this PR gets closer to resolving the original issue by combining the graphs onto the same plot Let me know anything I can do to resolve this |
No problems. Your approach looks good. Once again, thanks for your submission. |
@EvanMad our team is officially on vacations until January 6th. Meanwhile, what you could already do is to solve linter issues pointed out by the GitHub Actions CI, or also solving the merge conflicts error. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for your interest in solving this issue, @EvanMad. Overall, things look great to me! I was able to reproduce your plot when running the monte carlo usage notebook with the newest version (3.10) of matplotlib, which is good. Here are some remarks:
- I encountered an issue when trying to call the
plots.all
method with version 3.5 of matplotlib, see image (1). This might be a problem since the current minimum requirement for matplotlib in our project is >=3.0 . If you wish to reproduce the error, installmatplotlib==3.5
in a venv and run the monte carlo usage notebook; - This is merely for aesthetic reasons: we could remove the x-axis ticks, y-axis ticks, and x-axis label from the box plot, circled in red ellipsis in image (2); (unifying the plot titles might be a good idea as well, but nevermind this for now)
Image (1) - Error when plotting with version 3.5 of matplotlib
Image (2) - Suggested elements to be removed from the plot
print( | ||
f"{key:>25} {str(value[0]):>15} {str(value[1]):>15} {'N/A':>15} {'N/A':>15}" | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missed this, thanks, fixed it now :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for this very useful review btw, I have fixed the aesthetic issues aswell as the linting CI failure.
I can see the issue with matplot lib, I am using the height_ratios property which was introduced in matplotlib 3.6, I haven't fixed this yet, will look into it in the next couple of days
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've fixed the issues on matplotlib==3.5! Let me know what else needs to be done to get this merged.
Do i need to worry about code coverage?
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #760 +/- ##
===========================================
- Coverage 76.42% 76.33% -0.09%
===========================================
Files 95 96 +1
Lines 11090 11473 +383
===========================================
+ Hits 8475 8758 +283
- Misses 2615 2715 +100 ☔ View full report in Codecov by Sentry. |
done by removing height_ratios and replacing with gridspec
Pull request type
Checklist
black rocketpy/ tests/
) has passed locallypytest tests -m slow --runslow
) have passed locallyCHANGELOG.md
has been updated (if relevant)Current behavior
Prints maximum, minimum, mean, std dev
Plots ^ parameters with histograms
New behavior
Prints maximum, minimum, mean, std dev, 95% PI Lower, 95% PI Upper
Plots ^ parameters with histograms and boxplots
Breaking change
Additional information
For issue #730